package com.supermap.filetransfer.execute;

import com.supermap.filetransfer.thread.DownloadThread;

import java.io.IOException;
import java.util.UUID;

import okhttp3.Call;

/**
 * @author Huang.MinJie
 * @desc 任务抽象类
 * @date 2022/6/19 20:33
 */
public abstract class Tasker {
    public long taskId = System.nanoTime();// 记录任务唯一性
    public String id = UUID.randomUUID().toString().replaceAll("-",""); // 记录任务唯一性

    /**
     * 停止
     * @param msec 停止毫秒数 0代表永久停止
     */
    public abstract boolean onStop(long msec);

    /**
     * 取消
     */
    public abstract boolean onCancel();

    /**
     * 继续
     * @return
     */
    public abstract boolean onContinue();


    /**
     * 初始化完成
     * @param
     */
    public abstract void onInit();

    /**
     * 下载启动
     * @param
     */
    public abstract void onStart();

    /**
     *  重启
     * @return
     */
    public abstract boolean restart();

    /**
     * 下载失败
     * @param call
     * @param e
     * @param
     */
    public abstract void onFail(Call call, Exception e);

    /**
     * 子任务下载失败
     * @param call
     * @param e
     * @param tasker
     */
    public abstract void onSubtaskFail(Call call, Exception e, DownloadThread tasker) throws InterruptedException;


    /**
     * 子任务下载成功
     * @param tasker
     */
    public abstract void onSubtaskSuccess(DownloadThread tasker);

    /**
     * 下载完成
     * @param tasker
     */
    public abstract void onComplete(Tasker tasker) throws IOException;

    /**
     * 下载中
     * @param
     */
    public abstract void onRunning();
}
